
/**
 * @File    xxx
 * @brief   xxx
 * @auhtor  xxx
 * @data    xxx
 * @see     xxx
 * @note    xxx
**/

#include "server.h"

#define CFG_FILE "./config.cfg"

// 设置配置项的值.
int setval(char *key, char *value)
{
    if(key==NULL || value==NULL)
    {
        return -1;
    }

    if(strcmp("ip", key) == 0)
    {
        strcpy(g_config.ip, value);
        return  0;
    }
    if(strcmp("port", key) == 0)
    {
        g_config.port = atoi(value);
        return  0;
    }
    if(strcmp("sid", key) == 0)
    {
        g_config.sid = atoi(value);
        return  0;
    }
    if(strcmp("mng_ip", key) == 0)
    {
        strcpy(g_config.mng_ip, value);
        return  0;
    }
    if(strcmp("mng_port", key) == 0)
    {
        g_config.mng_port = atoi(value);
        return  0;
    }
    if(strcmp("is_daemon", key) == 0)
    {
        g_config.is_daemon = atoi(value);
        return  0;
    }
    if(strcmp("conn_max", key) == 0)
    {
        g_config.conn_max = atoi(value);
        return  0;
    }
    if(strcmp("conn_timeout", key) == 0)
    {
        g_config.conn_timeout = atoi(value);
        return  0;
    }

    warnx("Error : key=[%s],value=[%s]\n", key, value);

    return -1;
}



// 去空格, 判断特殊字符. 都转为小写.
int trim(char *str)
{
    char *src, *dst;

    if(str==NULL)
    {
        return -1;
    }

    src = dst = str;

    // 如果是注释,则打标记.
    char *p = strchr(str, '#');
    if(p)
    {
        *p = '\0';
    }

    while(*src)
    {
        if(isalnum(*src) || *src == '_' || *src == '=')
        {
            *dst = tolower(*src);
            dst++;
        }
        src++;
    }

    // 设置结束标记.
    *dst = '\0';

    return 0;
}

// 设置配置项的值.
int init_value()
{
    bzero(&g_config, sizeof(g_config));

    strcpy(g_config.ip, "127.0.0.1");
    g_config.port = 60002;
    g_config.sid = 60002;
    strcpy(g_config.mng_ip, "127.0.0.1");
    g_config.mng_port = 60000;
    g_config.is_daemon = 0;
    g_config.conn_max = 0;
    g_config.conn_timeout = 180;

    return 0;
}

// 读配置文件.
int read_config()
{
    char line[256];
    char *value;
    FILE *fp;

    init_value();

    fp = fopen(CFG_FILE, "r");
    if(fp == NULL)
    {
        warn("fopen(%s) error", CFG_FILE);
        return -1;
    }

    while(fgets(line, sizeof(line)-1, fp))
    {
        // 去特殊字符.
        trim(line);

        // 长度为0则不再处理.
        if(strlen(line) == 0)
        {
            continue;
        }

        // 找到值.
        value = strchr(line, '=');
        if(value)
        {
            *value = '\0';
            value++;
        }

        // 设置值.
        setval(line, value);
    }

    fclose(fp);

    return 0;
}


